package com.z.redis.command.impl;

import com.z.redis.RedisCore;
import com.z.redis.command.Command;
import com.z.redis.datatype.BytesWrapper;
import com.z.redis.resp.BulkString;
import com.z.redis.resp.Resp;
import com.z.redis.resp.RespArray;
import io.netty.channel.ChannelHandlerContext;

/**
 * 一个抽象基类 用来统一处理SCAN类命令
 */
public abstract class AbstractScan implements Command {
    @Override
    public void handle(ChannelHandlerContext ctx, RedisCore redisCore)
    {
        Resp[] array = new Resp[2]; // 创建长度为2的Resp数组
        // 固定游标值为0
        BulkString blukStrings = new BulkString(new BytesWrapper("0".getBytes(CHARSET)));
        array[0] = blukStrings;
        // 获取实际数据
        array[1] = get(redisCore);
        ctx.writeAndFlush(new RespArray(array));
    }

    protected abstract RespArray get(RedisCore redisCore);
}